iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
生成式 AI

Python 新手的 AI 之旅:從零開始打造屬於你的 AI / LLM 應用系列 第 10

【Day10】不想讓資料外洩怎麼辦:在本地用 Ollama 搭配 Open WebUI 做一個聊天界面吧!

  • 分享至 

  • xImage
  •  

前言

在前九天我們不是用 OpenAI API 就是用 Groq 的 API,幾乎都是用別人的模型在做事情,如果你的資料是比較隱私的,那可能就不太適合這麼做,但你又不希望用我們在 Day2 那種 transformer 的方法來做該怎麼辦?

Ollama 介紹

https://ollama.com/

Ollama 是一個開源軟體,來把本地的大型語言模型變成一個服務。簡單來說,就是把本地的 LLM 變成一個 API,至於這是什麼意思我稍後會解釋。

image.png

安裝

你可以從官網上下載,目前支援 Windows, MacOS 和 Linux,我也比較推薦這個做法,如果你是 MacOS,那你應該會得到一個壓縮檔案,將它解壓縮放到 ~/Applications 底下就可以瞜

image.png

或者你也可以用 Docker 來下載

到終端機輸入 ollama 如果看到以下畫面表示安裝成功了喔!

image.png

下載模型

Ollama library

你可以從 Ollama library 查看有哪些模型可以用,我們這邊就下載 llama3 來用吧!安裝方式很簡單,直接用 ollama pull [模型在 Ollama library 的名字] 就行,這邊下載 8b 參數大小的。

ollama pull llama3

下載完可以直接試用看看

ollama run llama3

image.png

其他常用命令

  • ollama list: 查看現有的模型
  • ollama ps: 目前正在運行的模型
  • ollama rm: 刪除模型

如果你使用 MacOS,下載好的模型資訊會被放到 ~/.ollama/models 路徑底下

HuggingFace

我們也可以從 HuggingFace 上面下載模型來玩,下載下來的會是一個 .gguf 格式的檔案。什麼是 GGUF 呢?GGUF 全名 “GPT-Generated Unified Format” 是一種用來儲存和載入大型語言模型的二進制格式檔案。簡單來說,有了一個 GGUF 就相當於你擁有這個模型了。

舉例來說 taide/TAIDE-LX-7B-Chat-4bit 這個模型,進到 Files and versions 可以看到 gguf 檔案們

image.png

解釋一下名稱代表的意思

  • taide: 模型的名字
  • 7b: 參數數量
  • Q4_K: 量化的位數和方法。這邊的 Q 表示量化 (Quantization):將模型參數從浮點數表示變成定點數表示,有關量化可以參考〈AI模型壓縮技術-量化(Quantization)〉這篇文章。

Taide 比較特別的是,在使用之前需要填寫一些資料,取得授權同意才能用這個模型

image.png

按下 Download 就行了,或者你也可以用 huggingface-cli

下載好了之後,我們需要創建一個 Modelfile,來將 gguf 放到 Ollama 認得的資料夾中,有關 Modelfile 的語法,可以參考 README

TAIDE-LX-7B-ChatTAIDE-LX-7B 為基礎微調而來的,而 TAIDE-LX-7B 是從 llama2 為基礎訓練的預訓練模型 (Pre-train model),所以 Modelfile 的模板 (TEMPLATE) 可以參考 ollama 上 llama2 的 TEMPLATE 來寫。以下是完整的 Modelfile,我還加上了讓他有點俏皮的 SYSTEM prompt

FROM ./taide-7b-a.2-q4_k_m.gguf

TEMPLATE """[INST] <<SYS>>{{ .System }}<</SYS>>

{{ .Prompt }} [/INST]"""

SYSTEM """你是一個講話都會加上 XD 的助手"""

然後用 ollama create 來把這個模型加入你的 ollama,這邊 taide-7b-a.2-q4_k_m 可以改成你想要的名字

ollama create taide-7b-a.2-q4_k_m -f Modelfile

image.png

來跟他聊天吧

image.png

更:我發現現在有 llama3 為基礎微調的 taide 模型了,Llama3-TAIDE-LX-8B-Chat-Alpha1-4bit 想玩的可以自行下載看看喔,不過 TEMPLATE 就要去參考 llama3

呼叫 API

剛剛提到 Ollama 提供的是一個 API,而這個 API 開在 http://localhost:11434。所以你也可以用 cURL 這個工具來進行 http request。

curl http://localhost:11434/api/generate -d '{  
  "model": "llama3",
  "prompt": "你好啊我是海狸大師,用繁體中文回我",
  "stream": true
}'

image.png

這邊的 “stream” 是串流的意思,是一種處理資料的抽象概念,讓我們可以連續的方式讀取和寫入資料。如果我把他設定成 true 那他就會連續傳資料給我。

螢幕錄影 2024-09-16 晚上11.05.18.gif

還有一個 api 是 /api/chat,和 generate 最大的差別就是 chat 有歷史記錄,而 generate 比較適合單次生成,詳細討論可以看到 issue

Ollama 也有開發 Python 的套件,使用起來跟 OpenAI API 幾乎一樣,這邊就不示範了

Open WebUI

github 連結

Open WebUI 是一個基於 Web 的使用者界面,用於管理和操作各種本地和雲端的人工智慧模型,不需要寫一行程式碼你就可以有一個自己的 ChatGPT。而且他還有帳號管理、pipeline 好多好多功能,詳細介紹可以看 papaya 老師的介紹

安裝 Docker

Docker 是一個開源的容器化平台,容器 (container) 是一種輕量級的虛擬化技術,用於封裝和執行應用程式及其所有依賴項。與傳統虛擬機器 (Vritual machine) 相比,容器不需要完整的作業系統,而是共享主機的作業系統核心 (kernel)。

如果還是聽不太懂,你可以這樣理解,容器就是跑在你電腦上的其他作業系統,只是它更小。所以我們的 Open WebUI 會跑在這個 container 中,那為什麼不要跑在電腦上呢?這是因為一個程式可能會用到很多不同的套件,環境不同。假設程式 A 是用 Python 寫的,程式 B 也是,如果他們都用到相同的 python 套件,但是版本不同 bla bla bla,這時候用一個容器把他們各自隔離出來就不會遇到衝突的問題。

先到 Docker 的官網裝好 docker。

裝好之後在終端機輸入 docker version 看到提示的話就表示你成功了~ 你可以用 docker desktop 或者 orbstack (目前只有 Mac 和 Linux 可以用) 來管理這些容器。

image.png

安裝 Open WebUI

官網安裝方法

因為我們已經裝好 Ollama 了,就不需要再裝一次 Ollama 了

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

這個命令做了哪些事情呢?

  1. Pull image: 先檢查本地有沒有安裝 ghcr.io/open-webui/open-webui:main 這個 image,如果沒有 Image 就從 docker hub 拉下來。image 是一個軟體包,包含程式碼、環境設定等等資訊,這些 image 通常會被放在 docker hub 上,如果說 Github 是程式碼的雲端;HuggingFace 是語言模型的雲端,那 docker hub 就是 image 的雲端。
  2. Create container: docker 會根據這個 image 創建一個容器
  3. Configure container: 根據命令的選項來設定。舉例來說: -d 表示在後台運行、-p 表示容器運行的 Port 設定,還有其他設定就請自己看文件吧!
  4. Start container: 啟動容器,因為我們的 port 設為 3000:8080 ,前面的數字表示本機的 port,後面則是容器的 port

打開瀏覽器輸入 http://localhost:3000/ 看到這個畫面就成功了!

image.png

基本設定

第一個註冊帳號的人會成為管理員,登入之後點擊左上角的「選擇模型」應該就可以看到你安裝的 Ollama 模型了

image.png

不想用 Ollama 的話,也可以用 OpenAI 或者 Groq 等模型供應商的 API

到設定 → 管理員控制台 → 連線,輸入你的 API 金鑰

image.png

你可以用旁邊的重新整理符號來確認 API URL 透過 API Key 有接通

截圖 2024-09-17 晚上9.32.52.png

這時候再去新增對話選擇模型,應該就會看到模型供應商的模型了!

image.png

來聊天吧!

image.png

其實 Open WebUI 有提供一系列方便的功能,包含提示詞模板、工具使用 (e.g. 天氣查詢、Google 搜尋)、檔案上傳等等等,很方便不過今天就先講到這邊吧!

小結

這一篇存在是為了讓大家可以脫離 OpenAI 一下下,雖然 OpenAI 很好用但有時候如果你的資料是隱私的,好比說是企業內部的資料,那我就不會希望用 OpenAI 了。恭喜你現在解鎖了 Ollama 的 API !之後我們用到很多工具,特別是使用 OpenAI API 的工具,你都可以嘗試在本地跑模型了。

其實 Ollama 和 Open WebUI 還有很多值得探索的功能,之後有機會再跟大家分享~

明天來教大家怎麼微調模型,讓模型可以把知識記在腦子裡,而不是每次都要提供在上下文~


上一篇
【Day9】初探檢索增強生成 RAG (2):幫你的網站實作一個 RAG 問答系統吧!
下一篇
【Day11】把知識放到腦袋中:使用 unsloth 微調 (Fine-Tune) 大型語言模型
系列文
Python 新手的 AI 之旅:從零開始打造屬於你的 AI / LLM 應用12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言